____ _ _ _ _
| _ \ ___ | |_ (_) _ __ ___ __| | (_) __ _
| |_) | / _ \ | __| | | | '_ \ / _ \ / _| | | | / _ |
| _ < | __/ | |_ | | | |_) | | __/ | (_| | | | | (_| |
|_| \_\ \___| \__| |_| | .__/ \___| \__,_| |_| \__,_|
|_|
- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b- `b
ÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻÂŻ
Paxos (Informatik)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
Paxos ist eine Gruppe von Kommunikationsprotokollen in der Informatik mit dem Ziel, einen Konsensus in einem Netzwerk von unzuverlässigen Prozessoren zu erzielen. Konsensus bezeichnet hierbei die Übereinstimmung auf ein gemeinsames Ergebnis in einer Gruppe von Teilnehmern. Die Lösung dieses Problems kann erschwert werden, wenn bei den Teilnehmern oder ihrem Kommunikationsmedium Fehler auftreten.cite-ref-agree-1-0[1]
Konsensusprotokolle sind in verteilten Systemen die Grundlage fĂĽr die Herangehensweise mittels Zustandsmaschinen, vorgeschlagen von Leslie Lamportcite-ref-clocks-2-0[2] und begutachtet von Fred B. Schneider.cite-ref-schneider-3-0[3]
Paxos geht verschiedene Kompromisse bezüglich der Anzahl an Prozessoren, der Anzahl an Nachrichtenverzögerungen vor dem Lernen des vereinbarten Wertes, des Aktivitätslevels der einzelnen Teilnehmer, der Anzahl an versandten Nachrichten und den Fehlertypen ein. Obwohl kein deterministisches fehlertolerantes Konsensusprotokoll Fortschritt in einem asynchronen Netzwerk garantieren kann (dies wurde in einem wissenschaftlichen Artikel von Fischer, Lynch und Paterson bewiesen),cite-ref-flp-6-0[6] garantiert Paxos Konsistenz, und die Bedingungen, die einen Fortschritt verhindern könnten, sind schwierig herbeizuführen.cite-ref-paxos-4-1[4]cite-ref-cheap-7-0[7]cite-ref-fast-8-0[8]cite-ref-general-9-0[9]cite-ref-byzantine-10-0[10]
Paxos wird ĂĽblicherweise wegen seiner Robustheit eingesetzt (zum Beispiel zur Replikation einer Datei oder einer Datenbank). Das Protokoll versucht sogar dann Fortschritt zu erzielen, wenn Phasen auftreten, in denen eine begrenzte Anzahl von Replikaten nicht ansprechbar sind. AuĂźerdem besitzt Paxos einen Mechanismus, um permanent fehlerhafte Replikate zu entfernen oder neue hinzuzufĂĽgen.
Contents
• Geschichte
• Annahmen
• Prozessoren
• Netzwerk
• Rollen
• Quoren
• Einzelnachweise
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Geschichte
1988 demonstrierten Lynch, Dwork und Stockmeyercite-ref-lds88-11-0[11] die Lösbarkeit des Konsensusproblems in einer weitgefassten Gruppe von „semi-synchronen“ Systemen. Paxos hat viele Ähnlichkeiten mit einem Protokoll, das zur Übereinstimmung in der viewstamped replication verwendet wird, erstmals veröffentlicht im Jahr 1988 von Oki and Liskov.cite-ref-vr-12-0[12]
Annahmen
Um die Funktionsweise von Paxos einfacher präsentieren zu können, werden folgende Annahmen und Definitionen explizit getroffen:
Prozessoren
• Prozessoren arbeiten in arbiträren Geschwindigkeiten.
• Störungen in Prozessoren können auftreten.
• Prozessoren mit einem stabilen Speicher können sich nach einer Störung wieder mit dem Protokoll verbinden.
• Prozessoren versuchen nicht, das Protokoll zu umgehen, das heißt, es treten keine Byzantinischen Fehler auf.
Netzwerk
• Prozessoren können Nachrichten an jeden anderen Prozessor senden.
• Nachrichten werden asynchron versandt und benötigen eine arbiträre Empfangszeit.
• Nachrichten können verloren gehen, neu angeordnet oder dupliziert werden.
• Nachrichten werden ohne Korruption übermittelt, das heißt, es treten keine Byzantinischen Fehler auf.
Anzahl an Prozessoren
Allgemein kann ein Konsensusalgorithmus Fortschritte erzielen, indem 2F+1 Prozessoren verwendet werden, obwohl es zu einem gleichzeitigen Ausfall von F Prozessoren kommt.cite-ref-consensus-13-0[13] Durch Rekonfiguration kann allerdings ein Protokoll verwendet werden, welches eine beliebige Anzahl an Ausfällen übersteht, solange nicht mehr als F Prozessoren gleichzeitig ausfallen.
Rollen
Paxos beschreibt die Aktionen der Prozesse durch ihre jeweiligen Rollen im Protokoll: Client, Acceptor, Proposer, Learner und Leader. In typischen Implementationen kann ein einzelner Prozessor eine oder mehrere dieser Rollen gleichzeitig innehaben. Dies beeinflusst nicht die Korrektheit des Protokolls, es ist ĂĽblich, Rollen zusammenzufĂĽgen, um die Latenz bzw. die Anzahl der Nachrichten im Protokoll zu verbessern.
Client
Der Client versendet eine Anfrage an das verteilte System und wartet auf eine Antwort. Beispielsweise könnte dies eine Schreibanfrage für eine Datei auf einem Server des verteilten Systems sein.
Acceptor
Der Acceptor handelt als der fehlertolerante „Speicher“ des Protokolls. Acceptors können Quoren bilden. Jede Nachricht, die an einen Acceptor gesandt wird, muss an ein Quorum von Acceptors gesandt werden. Nachrichten an einen Acceptor werden solange ignoriert, bis Kopien von jedem Acceptor in einem Quorum erhalten wurden.
Proposer
Ein Proposer vertritt eine Clientanfrage und versucht die Acceptors dazu zu bringen, sich auf diese zu einigen. AuĂźerdem handeln sie als Koordinatoren, sollte es zu Konflikten kommen.
Learner
Learnercite-ref-14[14] handeln als Replikationsfaktoren im Protokoll. Sobald sich die Acceptors auf eine Clientanfrage geeinigt haben, können die Learner handeln (zum Beispiel das Ausführen der Anfrage und das Senden einer Antwort an den Client). Es ist möglich, weitere Learner hinzuzufügen, um die Verfügbarkeit der Verarbeitung zu verbessern.
Leader
Um Fortschritt zu gewährleisten, benötigt Paxos einen ausgewählten Proposer, der Leader genannt wird. Prozesse können glauben, dass sie die Leader sind, aber Fortschritt ist nur dann gewährleistet, wenn einer von diesen ausgewählt wird. Wenn zwei Prozesse glauben, dass sie Leader wären, können sie den Prozess verzögern, indem sie kontinuierlich kollidierende Updates vorschlagen. Aber auch in diesem Fall werden die Sicherheitseigenschaften eingehalten.
Quoren
Quoren gewährleisten, dass zumindest einige wenige Prozessoren und mit ihnen Wissen über das Resultat überleben. Quoren sind so als Teilsummen der Summe aller Acceptors definiert, dass jedes Paar von Teilsummen zumindest einen Teilnehmer teilt. Üblicherweise ist ein Quorum jede beliebige Mehrheit von teilnehmenden Acceptors.
Vorgeschlagene Zahl und vereinbarter Wert
Jeder Versuch einen vereinbarten Wert zu definieren, wird durch Vorschläge durchgeführt, welche von Acceptors angenommen oder abgelehnt werden können. Jeder Vorschlag hat eine einzigartige Nummer für den jeweiligen Proposer. Der zu dem jeweils nummerierten Vorschlag zugehörige Wert kann optional als Teil des Paxos-Protokolls berechnet werden.
Sicherheitseigenschaften
Um Sicherheit zu garantieren, definiert Paxos drei Sicherheitseigenschaften und gewährleistet, dass diese unabhängig von auftretenden Fehlern eingehalten werden:
Nicht-Trivialität
Nur vorgeschlagene Werte können gelernt werden.cite-ref-fast-8-1[8]
Sicherheit
Lebendigkeit (C;L)
Wird ein Wert C vorgeschlagen, so wird schlussendlich irgendwann ein Learner L einen Wert lernen, solange genĂĽgend Prozesse fehlerfrei bleiben.cite-ref-general-9-2[9]
Typischer Einsatz
In den meisten Anwendungen von Paxos hat jeder teilnehmende Prozess drei Rollen inne: Proposer, Acceptor und Learner.cite-ref-live-15-0[15] Dies reduziert die Komplexität der Nachrichten signifikant, ohne dabei die Korrektheit zu beeinträchtigen:
„In Paxos senden Clients Befehle an Leader. Während des normalen Betriebs empfangen Leader die Befehle der Clients, bestimmen eine neue Anzahl an Befehlen i und beginnen dann die i-te Instanz des Konsensusalgorithmus, indem sie Nachrichten an eine Gruppe von Acceptorprozessen senden.“cite-ref-general-9-3[9]
Indem Rollen zusammengeführt werden, arbeitet das Protokoll im Stil eines effizienten „Client-Master-Replika“-Modells, so wie es typischerweise bei Datenbanken eingesetzt wird. Der Vorteil von Paxos ist dabei die Gewährleistung seiner Sicherheitseigenschaften.
Einzelnachweise
cite-note-agree-11. ↑ Marshall Pease, Robert Shostak, Leslie Lamport: Reaching Agreement in the Presence of Faults. In: Journal of the Association for Computing Machinery. 27. Jahrgang, Nr. 2, April 1980, S. 228–234, doi:10.1145/322186.322188 (englisch, microsoft.com [abgerufen am 2. Februar 2007]).
cite-note-clocks-22. ↑ Leslie Lamport: Time, Clocks and the Ordering of Events in a Distributed System. In: Communications of the ACM. 21. Jahrgang, Nr. 7, Juli 1978, S. 558–565, doi:10.1145/359545.359563 (englisch, microsoft.com [abgerufen am 2. Februar 2007]).
cite-note-lamport-55. ↑ Leslie Lamport's history of the paper. In: microsoft.com. Abgerufen im 1. Januar 1 (englisch).
cite-note-cheap-77. ↑ Leslie Lamport, Mike Massa: Cheap Paxos. Proceedings of the International Conference on Dependable Systems and Networks (DSN 2004). 2004 (englisch, microsoft.com).
cite-note-fast-88. ↑ Leslie Lamport: Fast Paxos. 2005; abgerufen im 1. Januar 1 (englisch).
cite-note-general-99. ↑ Leslie Lamport: Generalized Consensus and Paxos. 2005; abgerufen im 1. Januar 1 (englisch).
cite-note-byzantine-1010. ↑ Miguel Castro: Practical Byzantine Fault Tolerance. (PDF) 2001; abgerufen im 1. Januar 1 (englisch).
cite-note-vr-1212. ↑ Brian Oki, Barbara Liskov: Viewstamped Replication: A New Primary Copy Method to Support Highly-Available Distributed Systems. PODC '88: Proceedings of the seventh annual ACM Symposium on Principles of Distributed Computing. 1988, S. 8–17, doi:10.1145/62546.62549 (englisch, acm.org).
cite-note-consensus-1313. ↑ Leslie Lamport: Lower Bounds for Asynchronous Consensus. 2004; abgerufen im 1. Januar 1 (englisch).
cite-note-1414. ↑ Vgl. auch Rainer Dietrich: Learner, Language and Control. 1983.
cite-note-live-1515. ↑ Tushar Chandra, Robert Griesemer, Joshua Redstone: Paxos Made Live – An Engineering Perspective. In: PODC '07: 26th ACM Symposium on Principles of Distributed Computing. 2007 (englisch, google.com).